#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *strip(const char *s)
{
    int len = strlen(s);

    // buf是静态数据，编译时就会确定下来存储在a.out中
    // 但len是局部变量，要等到运行时才能确定其值
    // 因此以下语句无法通过编译，是错误的
    // static char buf[len+1];

    // malloc跟len一样，也是在运行时才开始分配内存
    // 因此以下语句可以通过编译，是正确的
    char *buf = malloc(len+1);

    // 去除s中的空格，放入buf中
    for(int i=0, k=0; i<len; i++)
    {
        if(s[i] != ' ')
        {
            buf[k] = s[i];
            k++;
        }
    }

    return buf;
}

int main(int argc, char const *argv[])
{
    char *s = "abc c  de f";

    char *p = strip(s);
    printf("%s\n", p); // p(buf) --> malloc(len+1)

    free(p);

    return 0;
}
